home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Varios Español
/
Varios Español.iso
/
DBASE5
/
SAMPLES.ZIP
/
MOV_CTAS.FRG
< prev
next >
Wrap
Text File
|
1994-10-12
|
7KB
|
299 lines
* Programa...........: C:\DBASE20\EJEMPLOS\MOV_CTAS.FRG
* Fecha..............: 2-23-93
* Versión............: dBASE IV, Informes 2.0
*
* Notas:
* ------
* Antes de ejecutar este procedimiento con el mandato DO
* es necesario usar LOCATE, pues la sentencia CONTINUE
* está en el bucle principal.
*
*-- Parámetros
PARAMETERS gl_noeject, gl_plain, gl_summary, gc_heading, gc_extra
** Los tres primeros parámetros son de tipo lógico
** El cuarto es una serie y el quinto es un parámetro adicional.
PRIVATE _peject, _wrap
*-- Comprueba si no se ha encontrado ningún registro
IF EOF() .OR. .NOT. FOUND()
RETURN
ENDIF
*-- Desactiva la justificación entre márgenes.
_wrap=.F.
IF _plength < (_pspacing * 4 + 1) + (_pspacing * 3 + 1) + 2
SET DEVICE TO SCREEN
DEFINE WINDOW gw_report FROM 7,17 TO 11,62 DOUBLE
ACTIVATE WINDOW gw_report
@ 0,1 SAY "Aumente la longitud de página del informe."
@ 2,1 SAY "Pulse una tecla ..."
x=INKEY(0)
DEACTIVATE WINDOW gw_report
RELEASE WINDOW gw_report
RETURN
ENDIF
_plineno=0 && pone el número de líneas a cero
*-- Parámetro NOEJECT
IF gl_noeject
IF _peject="BEFORE"
_peject="NONE"
ENDIF
IF _peject="BOTH"
_peject="AFTER"
ENDIF
ENDIF
*-- Establecimiento de entorno
ON ESCAPE DO Prnabort
IF SET("TALK")="ON"
SET TALK OFF
gc_talk="ON"
ELSE
gc_talk="OFF"
ENDIF
gc_space=SET("SPACE")
SET SPACE OFF
gc_time=TIME() && Tiempo del sistema para el campo predefinido
gd_date=DATE() && Fecha del sistema " " " "
gl_fandl=.F. && indicador de primera y última página
gl_prntflg=.T. && indicador de continuar impresión
gl_widow=.T. && indicador de comprobar apartados viudos
gn_length=LEN(gc_heading) && almacena la longitud del encabezamiento (HEADING)
gn_level=2 && apartado actual en proceso
gn_page=_pageno && captura el número de página actual
gn_pspace=_pspacing && captura el interlineado de la página impresa actual
*-- Activa el procedimiento para el salto de página
gn_atline=_plength - (_pspacing * 3 + 1)
ON PAGE AT LINE gn_atline EJECT PAGE
*-- Imprime el informe
PRINTJOB
*-- Inicializa las variables del resumen.
r_msum1=0
r_msum2=0
IF gl_plain
ON PAGE AT LINE gn_atline DO Pgplain
ELSE
ON PAGE AT LINE gn_atline DO Pgfoot
ENDIF
DO Pghead
gl_fandl=.T. && comienzo de la primera página física
DO Rintro
*-- Bucle de fichero
DO WHILE FOUND() .AND. .NOT. EOF() .AND. gl_prntflg
gn_level=0
*-- Cuerpo del informe
IF gl_summary
DO Upd_Vars
ELSE
DO __Detail
ENDIF
gl_widow=.T. && activa la comprobación de apartados viudos
CONTINUE
ENDDO
IF gl_prntflg
DO Rsumm
IF _plineno <= gn_atline
EJECT PAGE
ENDIF
ELSE
DO Rsumm
DO Reset
RETURN
ENDIF
ON PAGE
ENDPRINTJOB
DO Reset
RETURN
* EOP: C:\DBASE20\EJEMPLOS\MOV_CTAS.FRG
*-- Actualiza los campos resumen y/o los campos calculados.
PROCEDURE Upd_Vars
*-- Suma
r_msum1=r_msum1+BALANC_ANT
*-- Suma
r_msum2=r_msum2+IMP_CTA
RETURN
* EOP: Upd_Vars
*-- Desactiva el indicador para salir del bucle DO WHILE cuando se pulse ESC
PROCEDURE Prnabort
gl_prntflg=.F.
RETURN
* EOP: Prnabort
PROCEDURE Pghead
PRIVATE ll_heading, ln_width
ll_heading = .T.
ln_width = _rmargin - _lmargin
?
*-- Parámetros para imprimir la cabecera - si no cabe en una línea
*-- El valor añadido a gn_length es la última columna de la primera línea dos veces
IF .NOT. gl_plain .AND. gn_length + 156 > ln_width
?? gc_heading FUNCTION "I;V"+LTRIM(STR(ln_width))
?
ll_heading = .F.
ENDIF
?? IIF(gl_plain,'',gd_date) AT 0,;
"PAGINA " AT 66,;
IIF(gl_plain,'',_pageno) PICTURE "999"
*-- Parámetros para imprimir la cabecera - si cabe en la primera línea
IF .NOT. gl_plain .AND. gn_length > 0 .AND. ll_heading
?? " "
?? gc_heading FUNCTION "I;V"+LTRIM(STR(ln_width-(_pcolno*2)))
ENDIF
?
?
?
RETURN
* EOP: Pghead
PROCEDURE Rintro
?
DEFINE BOX FROM 23 TO 57 HEIGHT 4 DOUBLE
?
?? "A-T INDUSTRIAS DEL MUEBLE" STYLE "B" AT 28
?
?? "INFORME DE CUENTAS PENDIENTES" STYLE "B" AT 26
?
?
?
RETURN
* EOP: Rintro
PROCEDURE __Detail
IF 12 * gn_pspace < gn_atline - (_pspacing * 4 + 1)
IF gl_widow .AND. _plineno+12 * gn_pspace > gn_atline + 1
EJECT PAGE
ENDIF
ENDIF
DO Upd_Vars
?? ;
"──────────────────────────────────────────────────────────────────────";
+ "───────";
AT 0
?
?? "FACTURA Nº: " STYLE "B" AT 0,;
Num_fac FUNCTION "T" STYLE "B" ,;
"FECHA: " STYLE "B" AT 62,;
Fecha_fac STYLE "B"
?
?? "CLIENTE Nº: " AT 0,;
Cod_cli FUNCTION "T"
?
?? "ULTIMA FACTURA Nº: " AT 3,;
Num_ultfac FUNCTION "T" ,;
"ENVIADA: " AT 36,;
Fch_ultfac
?
?? "ULTIMA CUENTA: " AT 3,;
Imp_ultcta PICTURE "99,999,999" ,;
"₧" AT 33
?
?? "ULTIMO PAGO: " AT 3,;
Imp_ultpag PICTURE "99,999,999"
?
?? "----------" AT 22
?
?? "BALANCE ANTERIOR: " AT 3,;
Balanc_ant PICTURE "99,999,999" ,;
"₧" AT 33
?
?? "IMPORTE FACTURA: " AT 3,;
Imp_fac PICTURE "99,999,999" ,;
"COMENTARIO: " AT 36,;
Comentario FUNCTION "T"
?
?? "==========" AT 22
?
?? "IMPORTE CUENTA: " AT 3,;
Imp_cta PICTURE "99,999,999" AT 22,;
"₧" AT 33,;
"NOTAS: " AT 36,;
Notas FUNCTION "T"
?
?
RETURN
* EOP: __Detail
PROCEDURE Rsumm
?
?? ;
"══════════════════════════════════════════════════════════════════════";
+ "═══════";
AT 0
?
?? "IMPORTE TOTAL DE BALANCES ANTERIORES: " AT 0,;
r_msum1 PICTURE "99,999,999"
?
?? "IMPORTE TOTAL DE CUENTAS PENDIENTES: " AT 0,;
r_msum2 PICTURE "99,999,999"
?
?? ;
"══════════════════════════════════════════════════════════════════════";
+ "═══════";
AT 0
gl_fandl=.F. && terminada la última página
?
RETURN
* EOP: Rsumm
PROCEDURE Pgfoot
PRIVATE _box, _pspacing
gl_widow=.F. && desactiva la comprobación de líneas viudas
_pspacing=1
?
IF .NOT. gl_plain
_pspacing=gn_pspace
?
?? "PREPARADO POR EL DEPARTAMENTO FINANCIERO" AT 22
?
ENDIF
EJECT PAGE
*-- comprueba si el número de página es mayor que el de la última página
IF _pageno > _pepage
GOTO BOTTOM
SKIP
gn_level=0
ENDIF
IF .NOT. gl_plain .AND. gl_fandl
_pspacing=gn_pspace
DO Pghead
ENDIF
RETURN
* EOP: Pgfoot
*-- Proceso de los saltos de página cuando se usa la opción PLAIN
PROCEDURE Pgplain
PRIVATE _box
EJECT PAGE
RETURN
* EOP: Pgplain
*-- Restaura el entorno de dBASE previo a la impresión del informe
PROCEDURE Reset
SET SPACE &gc_space.
SET TALK &gc_talk.
ON ESCAPE
ON PAGE
RETURN
* EOP: Reset